package day11.fanxingdemo;
//泛型方法格式
//泛型在编译后会成为Object所以不支持基本数据类型，所以出现了基本数据类型的封装类

   /*
     public  <T> void show(T t)  权限后，返回值之前  声明一个泛型类<T>，那么就可以在形参直接用T t了，传的类型就可以很多
    {
        System.out.println(t);
    }


   */


import java.util.ArrayList;

public class fanxingdemo2 {
    public static void main(String[] args)
    {
         ArrayList<xiaomi> xiaomis=new ArrayList<>();
         xiaomis.add(new xiaomi());
         xiaomis.add(new xiaomi());
         xiaomis.remove(new xiaomi());
//         ArrayList list=new ArrayList();//Object类型的arrlist
//           go(list);
            go(xiaomis);

            //很明显这样是违规的，我的意愿是起码要接一个车类型的，但是形参是任意类型的arrlist，然后就出来了泛型的上下限去限制
            ArrayList<dog> dogs=new ArrayList<>();
        //    go(dogs);
        // extends 是上界，表示只能接受Car或者Car的子类?extends Car
        // super 是下界，表示只能接受Car或者Car的父类?super Car

//        Integer a[]={1,2,3};
//          printARR(a);

    }
    public static <T>void printARR(T[] t)//就是在前面声明了一个泛型，形参能用了而已//java泛型不支持基本类型     泛型就是广泛的类型，能装任意一个封装的类型。就是任意一个封装的类都能传给他
    {                                //( ArrayList<T> t)  数组和集合虽然用法差不多，但是他俩类型不一样
        for(int i=0;i<t.length;i++)
            System.out.println(t[i]);
      //  for(int i=0;i<t.size();i++) System.out.println(t.get(i));
    }


    public void testMyarrayAbility()
    {
        //主要是自己的声明数组和，需不需要new出现问题了
        Integer arrr[] = new Integer[3];
        arrr[0]=2;//测试一下除了自定义类型都不需要一个一个new，在已经声明数组的前提下

        Student s[] = new Student[3];
        s[0]=new Student(14);
        s[1]=new Student(15);
        s[2]=new Student(16);
        printARR(s);


        String arr[]=new String[3];
        arr[0]="hello";
        arr[1]="world";
        arr[2]="java";
        printARR(arr);


//       int a[]={1,2,3};
//       //printARR(a);

//        ArrayList list = new ArrayList();
//        list.add(1);
//        printARR(list);这不符合数组类型，他应该算一个容器
    }


    public static void go(ArrayList<?extends Car> cars)//在定义需要到的泛型的时候按照规矩是用大写E,K,T,V.
                                          //? 是通配符，在使用泛型的时候（不是定义）（作用：接到传的类型）用他去代替，表示可以接受任意类型，
                                          // 形参是任意类型的arrlist数组，你不写<>默认是Object类型的Arrlist
                                     // extends 是上界，表示只能接受Car或者Car的子类?extends Car
                                    // super 是下界，表示只能接受Car或者Car的父类?super Car

    {

    }
}
class Car
{

}
class xiaomi extends Car
{

}
class byd extends Car
{

}
class dog
{

}
